// 在原有组件中添加新组件和功能
// 新增图标组件
const User = {
  template: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M858.5 763.6a374 374 0 0 0-80.6-119.5 375.63 375.63 0 0 0-119.5-80.6c-.4-.2-.8-.3-1.2-.5C719.5 518 760 444.7 760 362c0-137-111-248-248-248S264 225 264 362c0 82.7 40.5 156 102.8 201.1-.4.2-.8.3-1.2.5-44.8 18.9-85 46-119.5 80.6a375.63 375.63 0 0 0-80.6 119.5A371.7 371.7 0 0 0 136 901.8a8 8 0 0 0 8 8.2h60c4.4 0 7.9-3.5 8-7.8 2-77.2 33-149.5 87.8-204.3 56.7-56.7 132-87.9 212.2-87.9s155.5 31.2 212.2 87.9C779 752.7 810 825 812 902.2c.1 4.4 3.6 7.8 8 7.8h60a8 8 0 0 0 8-8.2c-1-47.8-10.9-94.3-29.5-138.2zM512 534c-45.9 0-89.1-17.9-121.6-50.4S340 407.9 340 362c0-45.9 17.9-89.1 50.4-121.6S466.1 190 512 190s89.1 17.9 121.6 50.4S684 316.1 684 362c0 45.9-17.9 89.1-50.4 121.6S557.9 534 512 534z" fill="currentColor"></path></svg>'
}

const Cpu = {
  template: '<svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M6 18h12V6H6v12zM4 4h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2zm2 14h12V6H6v12zM8 8h8v8H8V8zm1 1v6h6V9H9zm3 3h2v2h-2v-2z" fill="currentColor"></path></svg>'
}

const Delete = {
  template: '<svg viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z" fill="currentColor"></path></svg>'
}

function AIChatSetup(){
  // 原有数据保持不变

  // 新增AI诊断相关数据
  const aiDialogVisible = ref(false)
  const userInput = ref('')
  const chatHistory = ref([])
  const isSending = ref(false)
  const chatMessages = ref(null)

  // 显示AI诊断对话框
  const showAIDialog = () => {
    aiDialogVisible.value = true

    // 如果没有历史消息，添加欢迎消息
    if (chatHistory.value.length === 0) {
      chatHistory.value.push({
        role: 'assistant',
        content: '您好！我是特种车辆设备故障诊断AI助手。我可以帮助您分析设备故障原因并提供维修建议。请问有什么可以帮您的？',
        timestamp: new Date().toISOString()
      })
    }

    // 滚动到底部
    nextTick(() => {
      scrollToBottom()
    })
  }

  // 发送消息到AI
  const sendMessage = async () => {
    if (!userInput.value.trim() || isSending.value) return

    const userMessage = userInput.value.trim()
    userInput.value = ''

    // 添加用户消息
    chatHistory.value.push({
      role: 'user',
      content: userMessage,
      timestamp: new Date().toISOString()
    })

    // 添加AI思考状态
    chatHistory.value.push({
      role: 'assistant',
      content: '',
      thinking: true,
      timestamp: new Date().toISOString()
    })

    isSending.value = true
    scrollToBottom()

    // 创建AbortController实例
    const controller = new AbortController()
    // 设置20秒超时
    const timeoutId = setTimeout(() => {
      controller.abort()
    }, 20000)

    try {
      // 准备请求数据
      const requestData = {
        mode: 'global',
        response_type: 'Multiple Paragraphs',
        top_k: 10,
        max_token_for_text_unit: 4000,
        max_token_for_global_context: 4000,
        max_token_for_local_context: 4000,
        only_need_context: false,
        only_need_prompt: false,
        stream: true,
        history_turns: 3,
        hl_keywords: [],
        ll_keywords: [],
        user_prompt: '',
        query: userMessage
      }

      // 发送请求，添加signal选项
      const response = await fetch('http://localhost:9621/query/stream', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify(requestData),
        signal: controller.signal // 将AbortController的signal传递给请求
      })

      clearTimeout(timeoutId) // 清除超时计时器

      if (!response.ok) {
        throw new Error(`API请求失败: ${response.status} ${response.statusText}`)
      }

      // 移除思考状态
      chatHistory.value[chatHistory.value.length - 1].thinking = false

      // 读取流数据
      const reader = response.body.getReader()
      const decoder = new TextDecoder('utf-8')
      let aiResponse = ''

      while (true) {
        const { done, value } = await reader.read()
        if (done) break

        // 1. 解码二进制流为字符串（处理中文等Unicode字符）
        const chunkStr = decoder.decode(value, { stream: true })

        // 2. 处理可能的多行JSON（流式传输可能分多个片段）
        const jsonLines = chunkStr.split('\n').filter(line => line.trim()) // 按行分割并过滤空行

        // 3. 解析每个JSON片段，提取response值
        jsonLines.forEach(line => {
          try {
            // 解析JSON（自动处理\uXXXX格式的Unicode转义字符）
            const jsonData = JSON.parse(line)
            // 提取response字段的值并拼接
            aiResponse += jsonData.response || ''
          } catch (err) {
            console.warn('解析流式JSON失败（可能是不完整片段）:', err, '原始内容:', line)
          }
        })

        // 4. 更新AI消息内容（实时显示拼接结果）
        chatHistory.value[chatHistory.value.length - 1].content = aiResponse

        // 滚动到底部
        scrollToBottom()
      }

    } catch (error) {
      clearTimeout(timeoutId) // 清除超时计时器

      console.error('AI诊断请求失败:', error)

      // 移除思考状态
      if (chatHistory.value.length > 0 &&
        chatHistory.value[chatHistory.value.length - 1].thinking) {
        chatHistory.value[chatHistory.value.length - 1].thinking = false
      }

      // 处理超时错误
      if (error.name === 'AbortError') {
        chatHistory.value.push({
          role: 'assistant',
          content: '抱歉，请求超时（20秒），请重试。',
          timestamp: new Date().toISOString()
        })
      } else {
        // 添加普通错误消息
        chatHistory.value.push({
          role: 'assistant',
          content: `抱歉，请求AI诊断时出错: ${error.message}`,
          timestamp: new Date().toISOString()
        })
      }

      scrollToBottom()
    } finally {
      isSending.value = false
    }
  }

  // 滚动到聊天底部
  const scrollToBottom = () => {
    nextTick(() => {
      if (chatMessages.value) {
        chatMessages.value.scrollTop = chatMessages.value.scrollHeight
      }
    })
  }

  // 格式化消息内容（保留换行）
  const formatMessage = (content) => {
    return content.replace(/\n/g, '<br>')
  }

  // 清空聊天历史
  const clearChatHistory = () => {
    chatHistory.value = [{
      role: 'assistant',
      content: '聊天记录已清空，请问有什么可以帮您的？',
      timestamp: new Date().toISOString()
    }]
  }

  // 原有setup返回保持不变，添加新函数
  return {
    // 原有返回对象
    // 新增
    aiDialogVisible,
    userInput,
    chatHistory,
    isSending,
    chatMessages,
    showAIDialog,
    sendMessage,
    formatMessage,
    clearChatHistory
  }
}
